JavaScript Boolean 特性
事發
之前其中一個 hungry delete commit
if (!columnNumber){
columnNumber = this.length;
}因為 Javascript 的 boolean 特性由致一個 bug。原意想用 if (!columnNumber) 判斷是否 undefined, 因為 columnNumber 是一個 optional number。但當 columnNumber 為 0 時,(!columnNumber) 為 true, 會計算錯誤的結果。
解決方法:
使用 typeof 就好了。
if (typeof columnNumber === 'undefined') {
columnNumber = this.length;
}Boolean 特性
JavaScript 判斷 boolean expression 時會自動轉換類型, Truthy 會轉為 true, 而 Falsy 會轉為 false。
非 Falsy 就是 Truthy, 值得注意: 以下幾種也是 Truthy
- {}
- []
- Infinity
- -Infinity而 Falsy 只有以下幾種:
- false
- null
- undefined
- 0
- NaN
- ''-""轉換為 boolean
一些 framework 會指明 boolean 的 value, 例如 vue.js, 可以利由 !! 把 boolean expresson 轉換為 boolean value.
!!([]) // true
!!(1) // true
!!(undefined) // false
!!(0) // false又或者為用 Boolean
Boolean([]) // true
Boolean(1) // true
Boolean(undefined) // false
Boolean(0) // false